package com.llsydn.beijingnews.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.llsydn.beijingnews.R;
import com.llsydn.beijingnews.SplashActivity;
import com.llsydn.beijingnews.util.CacheUtils;
import com.llsydn.beijingnews.util.DensityUtils;

import java.util.ArrayList;

/**
 * @author lilinshen
 * @title 引导页面
 * @description 请填写相关描述
 * @date 2018/10/24 15:22
 */
public class GuideActivity extends Activity {

    private ViewPager viewpager;
    private Button btn_start_main;
    private LinearLayout ll_point_group;
    private ImageView iv_red_point;
    private ArrayList<ImageView> imageViews;
    private int leftmax;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide);

        viewpager = findViewById(R.id.viewpager);
        btn_start_main = findViewById(R.id.btn_start_main);
        ll_point_group = findViewById(R.id.ll_point_group);
        iv_red_point = findViewById(R.id.iv_red_point);

        int[] ids = new int[]{R.drawable.guide_1, R.drawable.guide_2, R.drawable.guide_3};
        imageViews = new ArrayList<ImageView>();
        for (int i = 0; i < ids.length; i++) {
            // 创建imageview对象
            ImageView imageView = new ImageView(this);
            imageView.setBackgroundResource(ids[i]);
            imageViews.add(imageView);

            // 创建点
            ImageView point = new ImageView(this);
            // 这里10表示的像素，需要适配
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DensityUtils.dip2px(this, 10), DensityUtils.dip2px(this, 10));
            if (i != 0) {
                // 距离左边10和像素
                params.leftMargin = DensityUtils.dip2px(this, 10);
            }
            point.setLayoutParams(params);
            point.setBackgroundResource(R.drawable.point_normal);
            ll_point_group.addView(point);

        }
        // 设置viewpageer的适配器
        viewpager.setAdapter(new MyPagerAdapter());

        // 根据view的生命中期，当执行到onlayout和ondraw的时候，视图的高和宽，边距都有
        iv_red_point.getViewTreeObserver().addOnGlobalLayoutListener(new MyOnGlobalLayoutListener());

        // 得到屏幕滑动的百分比
        viewpager.addOnPageChangeListener(new MyOnPageChangeListener());

        // 设置按钮的点击事件
        btn_start_main.setOnClickListener((view) -> {
            // 保存进入过主页面
            CacheUtils.putBoolean(GuideActivity.this, SplashActivity.START_MAIN, true);

            // 跳转到主页面
            Intent intent = new Intent(GuideActivity.this, MainActivity.class);
            startActivity(intent);

            // 关闭当前页面
            finish();
        });
    }

    /**
     * onlayout监听类（计算两点距离）
     */
    class MyOnGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
        @Override
        public void onGlobalLayout() {
            //执行不止一次
            iv_red_point.getViewTreeObserver().removeOnGlobalLayoutListener(MyOnGlobalLayoutListener.this);
            // 间距 = 第1个点距离左边的距离 - 第0个距离左边的距离
            leftmax = ll_point_group.getChildAt(1).getLeft() - ll_point_group.getChildAt(0).getLeft();
        }
    }

    /**
     * viewpager滑动监听类（移动红点，显示隐藏按钮）
     */
    class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {

        /**
         * 页面滑动回调方法
         *
         * @param i  当前下标
         * @param v  页面滑动的百分比
         * @param i1 滑动的像数
         */
        @Override
        public void onPageScrolled(int i, float v, int i1) {
            // 两点间移动的距离 = 屏幕滑动百分比 * 间距
            // int leftmargin = (int) (positionOffset * leftmax);
            // Log.e(TAG,"position=="+position+",positionOffset=="+positionOffset+",positionOffsetPixels=="+positionOffsetPixels);
            // 两点间滑动距离对应的坐标 = 原来的起始位置 +  两点间移动的距离
            int leftmargin = (int) (i * leftmax + (v * leftmax));
            // params.leftMargin = 两点间滑动距离对应的坐标
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) iv_red_point.getLayoutParams();
            params.leftMargin = leftmargin;
            iv_red_point.setLayoutParams(params);
        }

        /**
         * 当页面被选中回调方法
         *
         * @param i
         */
        @Override
        public void onPageSelected(int i) {
            if (i == imageViews.size() - 1) {
                // 最后一个页面
                btn_start_main.setVisibility(View.VISIBLE);
            } else {
                // 其他页面
                btn_start_main.setVisibility(View.GONE);
            }
        }

        /**
         * 当页面滑动状态发生变化回调方法
         *
         * @param i
         */
        @Override
        public void onPageScrollStateChanged(int i) {

        }
    }

    /**
     * 自定义pageradapter
     */
    class MyPagerAdapter extends PagerAdapter {
        /**
         * 返回数据的总个数
         *
         * @return
         */
        @Override
        public int getCount() {
            return imageViews.size();
        }

        /**
         * 作用，getView
         *
         * @param container viewpager
         * @param position  要创建页面的位置
         * @return 返回和创建当前页面有关系的值
         */
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView imageView = imageViews.get(position);
            // 添加到容器中
            container.addView(imageView);
            return imageView;
        }

        /**
         * 判断
         *
         * @param view 当前创建的视图
         * @param o    上面instantiateItem返回的结果值（可以是position或view）
         * @return
         */
        @Override
        public boolean isViewFromObject(View view, Object o) {
            return view == o;
        }

        /**
         * 销毁页面
         *
         * @param container viewpager
         * @param position  要销毁页面的位置
         * @param object    要销毁的页面
         */
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }

}
